perm filename INFO.TO[P,JRA]1 blob
sn#560939 filedate 1981-01-30 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00002 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 \\M1BASL30\M2BASI30\M3BASB30\M4NGR30
C00015 ENDMK
C⊗;
\\M1BASL30;\M2BASI30;\M3BASB30;\M4NGR30;
\F1\CJan 25,1981
InfoWorld
530 Lytton Ave.
Palo Alto, CA, 94301
Dear InfoWorld:
\J
This is a response to the Jonathan Sach/Steve Gadol
review of TLC-LISP in your January
19, 1981 issue. My initial reaction was one of dismay. I had sent a review
copy to your offices (as requested) over six months ago; and here was an incomplete
and inaccurate review, not just of TLC, but of LISP itself.
I decided that someone else should or would respond, but then, since even the
ZIP code was wrong, something should be done soon. So what follows is my review
of your review. I hope you will publish it in a timely fashion, giving it
coverage comparable to the initial review.
\.
\C\F3Inaccuracies about LISP\F1
\J
1. The first three paragraphs of the review defy classification. Largely
they're inaccurate, but I don't really understand what they mean.
2. The fourth paragraph is definitely incorrect. LISP was \F2not\F1
designed for researchers in mathematical logic, and until the last
few years I doubt that you'd find a logician who would
be interested in looking at LISP.
3. The discussion about PROG is dismaying for several reasons. First,
if nothing else, structured programming rhetoric
and methodolody should have convinced
the world that things like 1960 LISP's PROG-label-GO-RETURN should be
viewed suspiciously.
Second, the suggested LET-PROGN combination is vacuous in attempting
to replace PROG-constructs.
LET is a sugar-coated version of LAMBDA; and PROGN is a sugar-coated version of
left-to-right evaluation, both features nicely contained within the
applicative subset called "pure LISP".
\.
\C(LET ((x1 v1) ... (xn vn)) exp) \F4≡\F1 ((LAMBDA (x1 ... xn) exp) v1 ... vn)
\C(PROGN e1 e2 ... en) \F4≡\F1 ((LAMBDA (d1 d2 ... dn) dn) e1 e2 ... en)
\J
In fact, the advertised use of LET to simulate PROG variables
is not necessary in modern LISPs. AUX-variables in the formal parameter list
handle that much better. Furthermore,
in many LISPs PROGN is implied in the body of constructs
and is only needed when the default sequencing is to be over-ridden.
So LET and PROGN, actually add nothing new. What \F2is\F1 the purpose of the PROG
assortment? A moment's analysis will reveal that
PROG is used for control structuring: iteration and exception handling
are the two major uses. The modern LISPs offer both: a DO-construct
that packages up the idea of initialization, iteration, and testing; and
a CATCH-THROW pair (a generalization of the ancient LISP ERRSET-ERR pair)
to expedite the construction of exception handlers. Indeed, with these
control constructs one can build all the generality of PROGs.
However, just like the card reader, it's time to let go of PROG-like features
for everyday programming, and certainly
when introducing new people to LISP.
The PROG collection was intentionally omitted (as
was card I-O), and modern constructs were substituted.
\.
\C\F3Inaccuracies about TLC-LISP\F1
\J
1. TLC-LISP is better described as a subset of LISP machine LISP (1980's), not
its parent MACLISP (1970's)
2. TLC-LISP has the AUX-variables, DO, CATCH, and THROW mentioned above.
3. TLC-LISP is stated to "compile" its programs; it does not, it
interprets its programs. I have an
experimental compiler, but it is not released.
4. TLC-LISP does not use 16-bit arithmetic; it uses
\F214-bit\F1 arithmetic. This is a temporary expedient to
gain efficiency in LISP integer arithmetic. The long-term solution
is arbitrary-precision arithmetic operations. This is a well-known
technique, introduced into LISP 1.6 in 1966, and exists
even in some micro-LISPs. Rather than develop another integer package,
we opted to supply floating-point arithmetic. Unfortunately,
the reviewer seems unaware of
the floating-point package.
5. The discussion of program size is quite muddled. The
TLC-LISP interpreter does \F2not\F1
occupy 30K, it occupies about 20K. Though the disk image is 30K, the system
is read into memory, moves the code segment up below
CP/M, and then builds the initial object-list. Allowing for CP/M,
this leaves about 20K, not 10K, on a 48K machine; 32K \F2Bytes\F1
are available on a 64K machine. Converting bytes to objects --a cons-object
is four bytes--, says that
a 64K machine is about comparable with a 7090 for space.
Until 1966,
the 7090 was the home of most LISP and AI research.
A Z-80 is significantly faster than a 7090 --TLC-LISP executes about
1/3 the speed of MACLISP running on a KA-10.
6. In "expanded version ...to 32K for data"
implies \F2bytes\F1 but acutally refers to \F2objects\F1 not \F2bytes\F1
This version uses bank-switching to support up to four banks
--128K bytes-- for LISP objects
with other banks for non-LISP data and programs. This
scheme supplies TLC-LISP with the
space of a mid-sized PDP-10 LISP job without
noticeable speed degradation. This version was running
at the AAAI Conference last summer, and has been released to a few sites.
7. The docmentation: it is \F2not\F1 meant to be a tutorial; I guess it
succeeded at that. It also got low marks in the "bar chart"; I guess the
inability of the reviewers to
discover TLC-LISP's features reinforces that too.
8. "On error handling", TLC-LISP calls a function named ERROR when an
anomaly occurs. To define your own handler, redefine the function ERROR.
It seems to work for me and my other customers.
\.
\C\F3Incompleteness of review\F1
\J
1. This is one of the most objectional areas. The disk was supplied
free of charge over six months ago, yet a superficial review resulted.
Even the TLC "flyer" mentions generalized
parameter passing (&AUX, &OPTIONAL, and &REST),
CATCH, THROW, DO, property-lists, floating-point, read macros,
run-time macros, generalized I/O, and virtualized functions.
A cursory glance through the index of the "fair"
documentation could have revealed much. Even a letter or two
could have been transmitted to me in six-months. Bad marks here, folks.
\.
\C\F3Petty annoyances.\F1
\J
1. (TLC) is (T .(L . C)) --a LISP person should know the difference.
2. Misspellings and typographical errors: the most obnoxious one is the
Zip code! its not 59044, 95044 please.
3. I quote: "equally dismal is the limit of 255 characters in the string length".
Oh, come on! I'd like to see
the application that the reviewer has in mind.
4. Though not J. Sach's fault, the price reported is not correct. I had considered
raising the price to $250/$20, but decided to leave it at $150/$15. There is no
way to make a living at either price; at $150 it's a "public service".
5. I agree, it is difficult to catch me.
I do have an answering machine installed for my customers;
in fact, installed in mid-August.
\.
\C\F3LISP-related Events\F1
\J
Three projects underway may interest InfoWorld readers:
At the West Coast Computer Faire this spring, a group of us have organized
a special session on LISP and object-oriented languages. I will be presenting
a tutorial and demos that will dispell some of the myths and misconceptions
about LISP-related activities.
Also, this summer Larry Masinter of Xerox PARC, and I
will give an intensive one-week LISP course at the
Western Institute in Computer Science hosted by the University of Santa
Clara.
To InfoWorld in general: I would suggest that if you'd send me a free
subscription,
I'd be glad to write reviews of some of \F2your\F1 material...like the
piece about computer literacy and automatic programming
--\F2The Mass Market Micro\F1. Things like that really
should be answered.
\.
\←L\→S\←R\-L\/'2;\+L\→L
Yours sincerely,
John R. Allen
The LISP Company
POB 487
Redwood Estates CA, 95044
\←S\→L
cc: S. Gadol
J. Sachs